
Blockly.defineBlocksWithJsonArray([{
    "type": "wait_seconds",
    "message0": " wait %1 seconds",
    "args0": [{
      "type": "field_number",
      "name": "SECONDS",
      "min": 0,
      "max": 600,
      "value": 1
    }],
    "previousStatement": null,
    "nextStatement": null,
    "colour": "%{BKY_LOOPS_HUE}"
  }]);
  
  /**
   * 1
   * 恋与机器人公司推出了第一款真正意义上的智能家政机器人，这个明星企业的股票从珠穆朗玛峰的山顶涨到了外太空，
   * 投资人们赚的盆满钵满，政府部门找到了新的经济增长点刺激消费，老百姓也可以从永远不可能做完的家务中解脱出来，这真是皆大欢喜的事情。
   * 只有一小撮科学家很警惕人工智能的发展，“他们早晚会伤害人类的，甚至是统治”，其实他们的担忧不无道理，
   * 
   * 发布会的焦点甚至不是机器人，而是神龙见首不见尾的公司董事长，大家只知道他是个不到35岁的青年才俊
   * 
   * “上次我的狗被保镖公司的蠢蛋机器人杀了，他只是喜欢那个人，想去闻闻他的味道，就被判定为威胁” 在产品发布会上，一个老妇人对着扩音器，语气悲伤中带着愤怒
   * 坐在妇人旁边的男子补充“他们现在能杀狗，以后就会杀人，请问恋与机器人公司如何保证这种情况不会发生？” 看年纪，他可能是妇人的儿子
   * 
   * “不用担心，我的兄弟姐妹们”  ，年轻帅气的CEO金爱恩毫不露怯，
   * “我可以用生命做出承诺，恋机公司的机器人永远不会攻击任何生命，这是写入核心芯片最底层的要求，万无一失，
   * 即使你以120分贝的声调去让他杀死那只冲你飞来的美洲大蠊，他们都不会动手，恋机将永远只是一个家政机器人公司” 
   * “可是我真的很害怕蟑螂” 一旁的女主持像是在活跃气氛
   * “机器人会尽量赶走或抓住它，在不伤害生命的情况下”
   * 
   * “那如果真的发生危险怎么办” 一个穿着华丽的女士提问 “针对独行女生的抢劫杀人案越来越多了，如果歹徒拿着刀向我捅过来，他会在旁边无动于衷吗?”
   * 
   * 今天的发布会，在台上人说完之后快速按发言按钮，手速最快的人发言，人人平等，并且杜绝了发言人和托儿一唱一和的作弊情况
   * 
   * “当然不会，我的女士，这种情况下无论是我还是我们的机器人，都会紧紧的抱住你，来挡下这一刀，你不会收到伤害，除非我们死在前面”
   * 台上的CEO说完后，露出招牌似的迷人微笑
   * 
   * 观众席上的女生们再也抑制不住自己的尖叫，矜持的妇人也纷纷捂起嘴巴，像自己被当众表白了那样。
   * 
   * “我能和她谈恋爱吗？”一个戴眼镜的男生羞涩的问道
   * 当然，你是她的主人，各种意义上” CEO隐晦的回答
   * 这回笑的人更多了，不过都没出声，眼镜哥的头也埋的更低了。
   * 
   * “价格，能买的起的人可以雇三个保姆了”
   * 目前贵，争取亲民
   * 
   * Generator for wait block creates call to new method
   * <code>waitForSeconds()</code>.
 
   * 
   * 
   * 人工智能在几十年的发展中一直在比拼智商和算力，而恋机的机器人情商特别的高
   * 
   * 
   大纲：
   主角可以作为一条线，最好要有
   1、介绍机器人和低调的董事长
   2、主角出现，女友撒娇要买，买完之后女友脾气更加爆炸，事事让我去学机器人，自己却和机器人比和我还亲密 最终爆发争吵 分居 以前都是我求回来，这次想报复，我自己也买了一个  这段写的搞笑点
  
   3、用起来神仙般的感觉，我渐渐的爱上了她，再也不想女友了，三妻四妾，一妻多夫也开始流行
  
   4、卖得好、成本平摊、更智能、更便宜、不像世纪初某些公司，因为垄断了生态就肆意涨价 
   5、普及之后开始引发社会问题，结婚率急剧降低，生育率降至冰点，没有女人愿意生孩子了，即使说服了女人，男人也不乐意和机器人一样当舔狗，
   呆在那碍眼，玩自己的机器人还被女人骂，男的也不愿意变生育机器，鼓励生育的政策也没用，感情的事不能强求
   去跟真人约会， “请问主人您，”她顿了顿，“晚上会回来吗”但我从她的语气中读出了不舍
   6、政府考虑禁止，禁令一出，股价腰斩导致股灾，投资人和股民不干了，用户也不愿意，很多人还经历了生离死别，
   政府内部人员也无法放弃这个经济增长点，税收，毫无疑问彻底禁止会造成严重的全球经济危机，没人承担的了这个责任
   7、卖卵合法化、也需要母体来培育，冒着背德的花钱雇人生孩子
   8、人类面临灭绝，物理学家开始怀疑机器为何如此智能，高出其他产品2个量级，砸碎了之后发现一些奇怪的构造，但确实是钢铁做的机器人，想继续
   
   9、  抵抗组织的领袖是一对夫妇，（男二），在销毁时，一个特别像他初恋的机器人说“对不起，没有让您满意，”然后试图自杀，一段对话后男人沉默了，抱了上去，被女主人发现
   两人分道扬镳，抵抗组织解散，其实是派来的间谍
   10、40年过去，世界已经没有多少年轻人了，科学家调查了第一批教机器人干活的员工、最初的投资人 终于了解了CEO的阴谋，所有机器人都是他自己的复制，智商低 却被身边的保姆机器人杀掉，人们终于知道了内情
   但是仅剩的孩子在机器人保姆手上，这是人类最后希望，人类只能妥协 他在机器人星球也是危险分子，逃避追杀来到了地球，用这种方式占领了地球，用着地球的能源充电，
   并准备反攻
   

   如果还有多余篇幅，描述下他自己初到地球的艰难创业史

   生育的核心功能——养老 得到了解决

   免费维修，
   强制剥掉人皮

   CEO复制自己的意识，迭代是不存在的 意识控制

   证明了恶毒的人，经过好环境 也可以有善心

   智商的进化是循序渐进的，人们早已习惯和机器人相处而意识不到危险，

   担心 CEO组成军队 ，没有查到任何控制、通信和针对用户的录像窃听
     * 2
   * “老公，丹丹家买了新出的恋机9，外表皮用了新材料，跟真人一模一样，我差点以为她又换男朋友了。” 我的女友小西从闺蜜家回来，就
   * 开始眉飞色舞的夸赞这款机器人，喜爱之前溢于言表
   * 
   * 恋与机器人的公司生产的
   * 智能家政机器人“恋机”已经出到了第九代，由于机器人销量大好，摊低了成本，价格已经不再高不可攀，更重要的是它真的能解决谁扫地谁洗碗谁倒垃圾的千古难题
   * 小西动了购买的心思也是人之常情。
   * “可我不希望家里有个比我还帅的男人杵在那，而且他们走来走去的时候，我有被监视的感觉”，我其实也想有个“人”来给我干活，所以反驳的底气稍显不足
   * “政府调查了多久，机器人1字节都没往外发过， 总部和机器人直接甚至都没有通信协议，都快2200年了还担心隐私问题，你是上个世纪的人么”
   * 不知道是不是故意，小西回避了我的第一个理由
   * “要不买个妹子吧，女生做家务的样子才赏心悦目” 我“大胆”的提出了解决方案
   * “别以为我不知道你想干什么，你是变态吗？”
   * 说实话我本来没想干什么，她这么一说我还真有点想干什么。
   * “这样吧，明年结婚不用换新车了，买恋机X吧， 这次是20周年特别版，会优化很多新功能，还提高了力量，能抱起180斤大活人，男友力MAX”
   * 
   * 我心里虽不情愿，却也无可奈何，智能机器人的进化速度之快，让人们相信不久的未来，养老问题将彻底解决。这样一来，养孩子大体失去了一半的意义，
   * 还愿意和我结婚生子的女孩子，无论如何得哄好了。
   * 
   * “看来我这辆祖传的皮卡还得再跑几年了”
   * 
  3 
    恋机X到货了，我也如愿和小西成了婚，
    充了一小会儿电，它站了起来并向我问好，小西说的没错，恋机X真的很仿真，我摸了摸他的脸，很柔软还带着温度，
    我们根据它给的提示设置管理权限，从此它称呼我为主人，叫小西“公主殿下”，它自己的名字是小贵子，并不是因为它的售价有点贵，而是小西在安胎时看多了宫廷戏。  
    接下来的几天，我发现这笔钱花的很值，我不停的指派任务，它不断的给我惊喜，
    扫过的地板一尘不染、乱七八糟的物品回到原来的位置、擦过的玻璃会让鸟撞上去、家里再也没有隔夜的垃圾、衣服洗好会“自动”烘干叠好、洗碗动作慢一点，但没有打碎过盘子，
    泡的茶温度刚刚好，喝完一杯马上给我续上、只有做饭差了点意思，不过也可以帮小西切菜和整理厨房。我不禁怀疑自己的智商，这个钱艾恩究竟是何等天才，都是程序员差距为何如此大。
    
    没过多久，我的儿子景自强出生了，小贵子更是忙前忙后，端茶递水，端屎端尿，我使唤他都使唤的不好意思了，
    鉴于它对家庭的贡献， 我给他改了名字，称它“老弟”，称我儿子大哥，桃园三结义
    
    多数故事的开头都有一段美好的时光，机器人是，我的婚姻也是，可惜不是永远
    
    由于儿子总是它在带，所以就儿子也更喜欢它，远远看去，他们倒像是一家三口，我承认自己对这个家付出太少，
    分居之后家里实在有点冷清，更重要的是，这些日子我有点消沉，家里已经乱七八糟了，桌子上的蟑螂已经敢跟我对视了
    但那些辛苦活一旦有人为你分担过，自己就再也不想做了。如今很多精英也是农民出生，再让他们下地种点东西试试？ 我这样想着，看上去像为自己开脱
    “由奢入俭难呐”我叹了口气，这个理由显然说服了自己，我再也没什么心理压力，订购了最新款的恋机18，
    这一代的恋机已经有“捏脸”功能，甚至能捏的不止是脸部
    而且价格更加亲民，CEO兑现了他的诺言，真正的为社会谋福利。
    我把灯光调暗，拉上窗帘，开始“捏脸”，我照着记忆中的初恋捏了一版，可记忆有点模糊实在捏的不像，我翻出了她的照片端详了一会，
    随即打消了“捏初恋”的念头，回头过俩月我和我老婆关系缓和，再让他看着这个，这不是自寻死路吗，万一中的万一，离婚之后我还能和初恋续续前缘，让她看到这个，也很尴尬
    最终我还是搜了个刚出道的年轻女明星梁梦依，照着她的高清照片捏好，略微做了修改，这样即使被发现也不会有肖像权纠纷
    选了个甜美的音色，黑长直的发型， 加装了些配置，点击了下单
   
    丢抚养权
     我沉浸在和小依的温柔乡中无法自拔，那甜美的音色，火辣的身材，柔软的怀抱，虽然交流起来还是感觉笨笨的，但那又如何呢，难道男人和女人之间就能交流吗？


  唤醒了我身体里仅存的责任感，想儿子，小依哀怨的看着我  我在小西下班的时间蹲守在她住处，盘算着这么久没见如何开口，视野里出现一个帅气的男子和一个年轻的女孩
  ，脚步有点蹒跚，
规定机器人不能出现在户外，所以他们等在楼道口
  男子公主抱着小西上楼，年轻女孩背着自强
  我去，17代和20代，即使是亲民价，一台新款恋机也要一辆中档汽车的钱， 她哪来那么多钱，如果是借债，那也是夫妻共同债务
  疯了疯了，小西家至少有3台恋机了，这要欠银行多少钱，这是夫妻共同负债我也要还啊，再加上她已经“三妻四妾”，更没可能回心转意，这样看结论很明显了，
  我决定回家就签离婚协议，


  少奶奶

  婚姻制度名存实亡，不光是机器代替了异性的功能，更是因为人类都变的无比任性，互相看不惯
  一开始大家还认为这是社会的进步，人的自由进一步取消限制，直到出生人口降到xxx人们才后知后觉

  一旦出政策阻止，这些借债又怎么办

  为了人类的未来，背弃伦理道德，折中的办法，通过法案政府出资建造养育中心，初期也考虑过全都采用人类保姆，但大部分人已经被恋机惯坏了，
  很难找到大量适合照顾婴儿的好脾气阿姨，
   恋与机器人公司无偿提供养育机器人 ， 最后只好让机器人保姆占据主体
  提供优质精子，付费邀请育龄妇女，生下的孩子可以放在养育中心，也可以自行养育
  这个办法倒是起到了很好的效果，大批婴儿出生，虽然大多数还是被他们的母亲留在了养育中心

 

  科学家被收买、被美人计，最后一个又被杀


  鸡飞蛋打，车毁人亡

  最先对恋与机器人公司发难的是一个科学组织——“人类发展联盟”，科学家们集体声称，恋机已经影响到人类的正常繁衍，并且其智能对人类有潜在的威胁
  现在是人类生死存亡之际，走错一步就容易万劫不复，智能机器人的泛滥相比2个世纪前热核战争的威胁

 
  
  任谁也无法将他们从社会中剔除

  即使是人类发展联盟里的科学家，也大多拥有机器人助手甚至伴侣,他们任职的企业股东里也总有恋与机器人的名字，只是作为科学工作者，有必要尽职尽责
  
   其实谁又何尝没有想过这些呢，政府对机器人有诸多的限制条款，但没有人敢站出来真正限制机器人的发展，仅有的几个也无法赢得足够的选票和资本大鳄的支持，
  对消费的刺激、大量的税收、公共服务需要的劳动力、人们已经养成的习惯，再加上无数民众和投资公司撑起的公司股价，已经有太多地方被机器人所绑架，看不到任何
  好处的事情，谁有愿意牺牲自己去做呢？

  这一次有所不同，在政府部门的调查报告中，已经有少部分民认为机器人对人类存在威胁，但让他们自己停止使用机器人，那是万万不可的
  
  最终联合国力排众议，通过了对恋与机器人公司所有内外部通信的实施监控的法案，确保不含有任何非法的指令，即使公司高层想在软件里加入对人类不利的程序，也无法
  通知到开发部门，更不要说开发部门那么多人类集体背叛社会的可能，他们还禁止了机器人之间的指令传输，交流和人类一样使用语言，虽然不能让机器人们协同工作了，但也彻底杜绝了他们联合起来的可能
   这样一来，即使是最谨慎的科学家也能睡上一个好觉了

   
  过了几年，恋与机器人公司已经更像一个国际组织了，他们给每一个或肢体残迹、或行动不便或生活不能自理的贫困者赠送护工机器人，还自费包办了
  数不清的公共服务，清扫街道、搬运货物、不仅没有一起机器人伤人的事件，那些舍身救人的机器人还会被颁发勋章，对人类有突出共享的也会。恋与机器人公司的影响力已经超过联合政府，
  这点其实并不重要，因为不被爱与机器人公司支持的人没那么多钱来路演拉票、成为议员
  机器人的机械结构已经足够灵活，躯体比真人的还要温暖舒适，恋机的更新换代变少，取而代之的是花一些钱升级软件“亿云”的版本即可，
  随着他们越来越聪明，和人类在一起的时间变长，再加上对主人生活习惯和语言习惯的学习，已经越来越多人将恋机当成自己的家人

  在这些年中，联合政府没有监听到一例1级非法通讯，而发现的2、3级非法通讯也全都是员工之间的闲聊，人们早已对机器人和爱与机器人公司放下了戒心

  人类进入新纪元

  最重要的是 人口老龄化已经到了及其恐怖的比例，没有机器人，全球经济崩溃都不需要时间
  反抗组织，疯狂杀戮机器人


  

  本以为人类从繁重工作中解放之后生育会反弹，然而并没有，男人和女人们也许会相爱，但无法忍受超过一个月的同居，
  带着自己原来的“机器情人”们一定会让对方妒忌，情侣双双抛弃机器人却更显困难，就算做到这一点，
  他们会很快发现无法长期打理自己的生活，更不要说照顾对方


  但我总觉得有哪里不对，又说不清楚，小灵给我煮了水果羹，我看着镜子里苍老的脸，突然觉得钱艾恩这个人老的有些不自然
  

   */

  Blockly.JavaScript['wait_seconds'] = function(block) {
    var seconds = Number(block.getFieldValue('SECONDS'));
    var code = 'waitForSeconds(' + seconds + ');\n';
    return code;
  };
 
  /**
   * Register the interpreter asynchronous function
   * <code>waitForSeconds()</code>.
   */
  function initInterpreterWaitForSeconds(interpreter, scope) {  
    // Ensure function name does not conflict with variable names.
    Blockly.JavaScript.addReservedWords('waitForSeconds');
  
    var wrapper = interpreter.createAsyncFunction(
      function(timeInSeconds, callback) {
        // Delay the call to the callback.
        setTimeout(callback, timeInSeconds * 1000);
      });
    interpreter.setProperty(scope, 'waitForSeconds', wrapper);
  }



 
    var demoWorkspace = Blockly.inject('blocklyDiv',
        {media: 'blockly/media/',
         toolbox: document.getElementById('toolbox')});

    Blockly.Xml.domToWorkspace(document.getElementById('startBlocks'),
                               demoWorkspace);

    // Exit is used to signal the end of a script.
    Blockly.JavaScript.addReservedWords('exit');  //addReservedWords 添加关键字

    var outputArea = document.getElementById('output');
    var runButton = document.getElementById('runButton');
    var myInterpreter = null;
    var runner;

    function initApi(interpreter, scope) {  // interpreter 解释器 ， scope 范围
      // Add an API function for the alert() block, generated for "text_print" blocks.
      var wrapper = function(text) {  // 这样写匿名函数 相当于函数名为 wrapper
        text = text ? text.toString() : '';
        outputArea.value = outputArea.value + '\n' + text;
      };
      interpreter.setProperty(scope, 'alert',     // setProperty 设置属性
          interpreter.createNativeFunction(wrapper));

      // Add an API function for the prompt() block.
      var wrapper = function(text) {
        text = text ? text.toString() : '';
        return interpreter.createPrimitive(prompt(text));  //这个return是 主函数initApi()的，不是匿名函數的
      };
      interpreter.setProperty(scope, 'prompt',
          interpreter.createNativeFunction(wrapper));

      // Add an API for the wait block.  See wait_block.js
      initInterpreterWaitForSeconds(interpreter, scope);

      // Add an API function for highlighting blocks.
      var wrapper = function(id) {
        id = id ? id.toString() : '';
        return interpreter.createPrimitive(highlightBlock(id));
      };
      interpreter.setProperty(scope, 'highlightBlock',
          interpreter.createNativeFunction(wrapper));
    }

    var highlightPause = false;
    var latestCode = '';

    function highlightBlock(id) {   // 高亮拼图块
      demoWorkspace.highlightBlock(id);
      highlightPause = true;
    }

    function resetStepUi(clearOutput) {
      demoWorkspace.highlightBlock(null);
      highlightPause = false;
      runButton.disabled = '';

      if (clearOutput) {
        outputArea.value = 'Program output:\n=================';
      }
    }

    function generateCodeAndLoadIntoInterpreter() {
      // Generate JavaScript code and parse it.
      Blockly.JavaScript.STATEMENT_PREFIX = 'highlightBlock(%1);\n';
      Blockly.JavaScript.addReservedWords('highlightBlock');
      latestCode = Blockly.JavaScript.workspaceToCode(demoWorkspace);

      resetStepUi(true);
    }

    function resetInterpreter() {
      myInterpreter = null;
      if (runner) {
        clearTimeout(runner);
        runner = null;
      }
    }

    // function test_eval(){
    //   eval(" alert('谈笑华莱士，往来宋祖英')");
    // }

    function runCode() {
      if (!myInterpreter) {
        // First statement of this code.
        // Clear the program output.
        resetStepUi(true);
        runButton.disabled = 'disabled';

        // And then show generated code in an alert.
        // In a timeout to allow the outputArea.value to reset first.
        setTimeout(function() {
          alert('Ready to execute the following code\n' +
            '===================================\n' +
            latestCode);

          // Begin execution
          highlightPause = false;
          myInterpreter = new Interpreter(latestCode, initApi); // 实例化解析器 myInterpreter
          runner = function() {
            if (myInterpreter) {
              var hasMore = myInterpreter.run();
              if (hasMore) {
                // Execution is currently blocked by some async call.
                // Try again later.
                setTimeout(runner, 10);
              } else {
                // Program is complete.
                outputArea.value += '\n\n<< Program complete >>';
                resetInterpreter();
                resetStepUi(false);
              }
            }
          };
          runner();
        }, 1);
        return;
      }
    }

    // Load the interpreter now, and upon future changes.
    generateCodeAndLoadIntoInterpreter();
    demoWorkspace.addChangeListener(function(event) {
      if (!(event instanceof Blockly.Events.Ui)) {
        // Something changed. Parser needs to be reloaded.
        resetInterpreter();
        generateCodeAndLoadIntoInterpreter();
      }
    });
